package com.example.webflux_module.service;

import reactor.core.publisher.Flux;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * Flux 是一个发出（emit）0-N个元素组成的异步序列的 Publisher，
 * 可被 onComplete 信号或者 onError 信号所终止，
 * 在响应流规范中存在三种给下游消费者调用的方法 onNext，onComplete 和 onError。
 */
public class FluxService {
    /**
     * ==================================================
     * 传统数据处理
     * ==================================================
     */
    public List<UserInfo> get() {
        return Arrays.asList(UserInfo.builder()
                        .userId("90001")
                        .userName("zhang")
                        .build(),
                UserInfo.builder()
                        .userId("90002")
                        .userName("wang")
                        .build());
    }

    /**
     * ==================================================
     * 流式数据处理
     * ==================================================
     */
    public Stream<UserInfo> echo() {
        return Stream.of(UserInfo.builder()
                .userId("90001")
                .userName("zhang")
                .build(), UserInfo.builder()
                .userId("90002")
                .userName("wang")
                .build());
    }

    /**
     * ==================================================
     * 反应式数据处理
     * ==================================================
     */
    public Flux<UserInfo> gett() {
        return Flux.just(UserInfo.builder()
                .userId("90001")
                .userName("zhang")
                .build(), UserInfo.builder()
                .userId("90002")
                .userName("wang")
                .build());
    }
}
